package br.edu.ufcg.unknown.sintatico;

import java.util.ArrayList;
import java.util.List;

import br.edu.ufcg.unknown.lexico.UnknownTest;

public class IdentificaTKTest extends UnknownTest {

	private IdentificaTK ident;
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		this.ident = new IdentificaTK();
	}
	
	public void testGetPrimeirosDeExpressaoUnaria(){
		List<String> primeirosEsperados = new ArrayList<String>();
		add(primeirosEsperados, "NOT", "-", "(", "t_ident", "t_numero", "TRUE", "FALSE", "t_cadeia");
		List<String> primeiros = this.ident.getPrimeirosDeExpressaoUnaria();
		assertTrue(isEqual(primeirosEsperados, primeiros));
	}
	
	public void testGetPrimeirosDeExpressaoMultiplicativa(){
		List<String> primeirosEsperados = new ArrayList<String>();
		add(primeirosEsperados, "*", "/", "DIV", "MOD", "AND", "");
		List<String> primeiros = this.ident.getPrimeirosDeExpressaoMultiplicativa();
		assertTrue(isEqual(primeirosEsperados, primeiros));
	}

	public void testGetPrimeirosDeExpressaoAditiva(){
		List<String> primeirosEsperados = new ArrayList<String>();
		add(primeirosEsperados, "+", "-", "OR", "");
		List<String> primeiros = this.ident.getPrimeirosDeExpressaoAditiva();
		assertTrue(isEqual(primeirosEsperados, primeiros));
	}
	
	public void testGetPrimeirosDeExpressaoRelacional(){
		List<String> primeirosEsperados = new ArrayList<String>();
		add(primeirosEsperados, "=", "<>", ">", "<", ">=", "<=", "");
		List<String> primeiros = this.ident.getPrimeirosDeExpressaoRelacional();
		assertTrue(isEqual(primeirosEsperados, primeiros));
	}
	
	public void testGetPrimeirosDeTermo(){
		List<String> primeirosEsperados = new ArrayList<String>();
		add(primeirosEsperados, "NOT", "-", "(", "t_ident", "t_numero", "TRUE", "FALSE", "t_cadeia");
		List<String> primeiros = this.ident.getPrimeirosDeTermo();
		assertTrue(isEqual(primeirosEsperados, primeiros));
	}
	
	public void testGetPrimeirosDeExpressaoSimples(){
		List<String> primeirosEsperados = new ArrayList<String>();
		add(primeirosEsperados, "NOT", "-", "(", "t_ident", "t_numero", "TRUE", "FALSE", "t_cadeia");
		List<String> primeiros = this.ident.getPrimeirosDeExpressaoSimples();
		assertTrue(isEqual(primeirosEsperados, primeiros));
	}
	
	public void testGetPrimeirosDeExpressao(){
		List<String> primeirosEsperados = new ArrayList<String>();
		add(primeirosEsperados, "NOT", "-", "(", "t_ident", "t_numero", "TRUE", "FALSE", "t_cadeia");
		List<String> primeiros = this.ident.getPrimeirosDeExpressao();
		assertTrue(isEqual(primeirosEsperados, primeiros));
	}
	
	private void add(List<String> primeirosEsperados, String... primeiro) {
		for (int i = 0; i < primeiro.length; i++) {
			primeirosEsperados.add(primeiro[i]);
		}
	}
	
}
